package com.shiyu.common.core.Utils;

import com.shiyu.common.core.constants.JwtConstants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

public class JwtUtils {
//    生成令牌
    public static String createToken(Map<String ,Object> claims,String secret){
        String token= Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512,secret).compact();
        return token;
    }
//    从令牌获取数据
    public static Claims paresToken(String token,String secret){
        return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
    }

    public static void main(String[] args) {
        Map<String ,Object> claims=new HashMap<>();
        claims.put("userId",1234568L);
//        secret 保密,随机性,不硬编码 定期更换
        System.out.println(createToken(claims, "sdsdsfsdfsx"));
        System.out.println(paresToken("eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOjEyMzQ1Njh9.EOmycz508rvDC2fW7RfCxDwexMswVAlu5H2gbnynHOp_NnZwoBxy1gc4LgAK4dvx4jfOeIucVl70qSK06ZpZJg", "sdsdsfsdfsx"));
//        1. 登陆成功之后,电泳createToken生成令牌,并发送给客户端
//        2.  服务器收到之后,进行解析,验证token.后续的所有请求在调用具体功能之前,进行验证
//        3.用户使用系统的过程中需要进行合适的延长过期时间
    }
    public static String getUserKey(Claims claims){
        Object value=claims.get(JwtConstants.LOGIN_USER_KEY);
        return toStr(value);
    }

    private static String toStr(Object value) {
        if(value ==null){
            return "";
        }
        return value.toString();
    }

    public static String getUserId(Claims claims){
        Object value=claims.get(JwtConstants.LOGIN_USER_ID);
        return toStr(value);
    }


}
